class MVVM{
  constructor(option){
    // 保存基础信息
    this.$el= option.el
    this.$data= option.data
    // 模板编译
    if(this.$el){
      // 数据劫持，将所有的对象get set进行重写
      new Observer(this.$data)
      this.proxyData(this.$data);
      // 使用数据和元素进行编译
      new Compile(this.$el,this)
    }
  }
  // 直接使用vm访问到$data
  proxyData(data){
    Object.keys(data).forEach(key=>{
      Object.defineProperty(this,key,{
        get(){
          return data[key]
        },
        set(newValue){
          data[key] = newValue;
        }
      })
    })
  }
}